Technical Q&A QA1157
Base-Derived async image codecs must implement ImageCodecQueueStarting and ImageCodecQueueStopping


QÅFBase Image Decompressor ÇégǧÉRÅ[ÉfÉbÉNÇèëǴNjǵÇΩÅBDZÇÃÉfÉRÉìÉvÉåÉbÉTÇÕîÒìØä˙Ç…é¿çsÇ∑ÇÈïKóvǙdžÇËÅiDrawBand ä÷êîÇÕà¿ëSÇ≈ǻǢåƒÇ—èoǵÇàÍêÿǵNjÇπÇÒÅjÅAImageCodecInitialize ÇÃé¿çséûÇ…ÉTÉuÉRÅ[ÉfÉbÉNã@î\ÇÃÉåÉRÅ[ÉhÇ… canAsync ÉtÉâÉOÇämé¿Ç…ÉZÉbÉgÇ∑ÇÈÇÊǧDžǵNjǵÇΩÅBǵǩǵÅAÉRÅ[ÉfÉbÉNÇÕîÒìØä˙Ç…é¿çsǵǃǢǻǢÇÊǧÇ≈Ç∑ÅBâΩǩǙë´ÇËǻǢÇÃÇ≈ǵÇÂǧǩÅB

AÅF ÉxÅ[ÉXÉRÅ[ÉfÉbÉNÇ…äÓÇ√Ç≠îÒìØä˙ÉRÅ[ÉfÉbÉNÇÕÅAcanAsync ÉtÉâÉOÇÃÉZÉbÉgÇ…â¡Ç¶ÇƒÅAImageCodecQueueStarting Ç®ÇÊÇ— ImageCodecQueueStopping ÉãÅ[É`ÉìÇé¿ëïÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉRÅ[ÉfÉbÉNÇ…ÅADZÇÍÇÁÇÃåƒÇ—èoǵÇé¿ëïǵǻǢÇΔÅAÉxÅ[ÉXÉRÅ[ÉfÉbÉNÇÕìØä˙çƒê∂Ç…ñflǡǃǵNjǢNjÇ∑ÅB

DZÇÍÇÁÇÃåƒÇ—èoǵéûÇ…ÉRÅ[ÉfÉbÉNÇ™âΩLJÇ∑ÇÈïKóvǙǻǢèÍçáÇÕÅAíPÇ… noErr ÇñflÇ∑ÇÊǧDžǵNjÇ∑ÅB

ÉäÉXÉg 1 ÇÕÅAÉfÉBÉXÉpÉbÉ`ÉtÉ@ÉCÉãÇê›íËǵÅA2 ǬÇÃÉZÉåÉNÉ^Çé¿ëïÇ∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB

ÉäÉXÉg 2 ÇÕÅAQueueStarting ÇΔ QueueStopping ÇÃåƒÇ—èoǵéûÇ…ÉRÅ[ÉfÉbÉNÇ™âΩLJÇ∑ÇÈïKóvǙǻǢèÍçáÇ…ÅAComponentDispatchHelper Ç…çÏãΔÇé¿çsÇ≥ÇπÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB


// MySubCodecDispatch.h
 ...

    ComponentRangeBegin (3)
        ComponentCall     (Preflight)
        ComponentCall     (Initialize)
        ComponentCall     (BeginBand)
        ComponentCall     (DrawBand)
        ComponentCall     (EndBand)
        ComponentCall     (QueueStarting)
        ComponentCall     (QueueStopping)
        ComponentDelegate (DroppingFrame)
        ComponentDelegate (ScheduleFrame)
        ComponentDelegate (CancelTrigger)
    ComponentRangeEnd (3)
 ...

// MySubCodec.c
 ...

// ImageCodecQueueStarting
//     Base Image Decompressor ÇÕÅAÉLÉÖÅ[DždžÇÈÉtÉåÅ[ÉÄÇêLí∑Ç∑ÇÈëOÇ…ÅA
// ÉCÉÅÅ[ÉWÉfÉRÉìÉvÉåÉbÉTÉRÉìÉ|Å[ÉlÉìÉgÇà ImageCodecQueueStarting 
// ä÷êîÇåƒÇ—èoǵNjÇ∑ÅBBase Image Decompressor ÇÕÅAäÑÇËçûÇ›éûÇ… 
// ImageCodecQueueStarting ä÷êîÇåƒÇ—èoÇ∑DZÇΔÇÕǻǢÅB
// ÉRÅ[ÉfÉbÉNÇ™îÒìØä˙ÇÃíËä˙êLí∑ÇÉTÉ|Å[ÉgÇ∑ÇÈèÍçáÅADZÇÃÉZÉåÉNÉ^Çé¿ëï
// Ç∑ÇÈïKóvǙdžÇÈÅBDZÇÃÇΔÇ´ÅAÉRÅ[ÉfÉbÉNÇ™âΩLJÇ∑ÇÈïKóvÇ™Ç»ÇØÇÍÇŒÅA
// íPÇ… noErr ÇñflÇ∑ÅB
pascal ComponentResult EI_ImageCodecQueueStarting(EI_Globals glob)
{
 #pragma unused(glob)

    return noErr;
}

// ImageCodecQueueStopping
//     Base Image Decompressor ÇÕÅAImageCodecQueueStopping ä÷êîÇ
// åƒÇ—èoǵÅA ÉLÉÖÅ[DždžÇÈÉtÉåÅ[ÉÄÇ™êLí∑Ç≥ÇÍÇΩDZÇΔÇÉRÅ[ÉfÉbÉNÇ…í ímÇ∑ÇÈÅB
// Image Decompressor ÉRÉìÉ|Å[ÉlÉìÉgÇÕÅAImageCodecQueueStopping ÇÃ
// åƒÇ—èoǵÇèàóùǵÇΩå„ÅAïsóvÇΔǻǡÇΩÉfÅ[É^ç\ë¢ëÃÇÃîjä¸Ç»Ç«ÅAÉtÉåÅ[ÉÄÇÃ
// êLí∑Ç™äÆóπÇ∑ÇÈÇΔÇ´Ç…ïKóvÇ»îCà”ÇÃÉ^ÉXÉNÇé¿çsÇ≈Ç´ÇÈÅB
// ÉRÅ[ÉfÉbÉNÇ™îÒìØä˙ÇÃíËä˙êLí∑ÇÉTÉ|Å[ÉgÇ∑ÇÈèÍçáÅADZÇÃÉZÉåÉNÉ^Çé¿ëïÇ∑ÇÈ
// ïKóvǙdžÇÈÅBDZÇÃÇΔÇ´ÅAÉRÅ[ÉfÉbÉNÇ™âΩLJçÏãΔÇ∑ÇÈïKóvÇ™Ç»ÇØÇÍÇŒÅA
// íPÇ… noErr ÇñflÇ∑ÅB
// Base Image Decompressor ÇÕÅAäÑÇËçûÇ›éûÇ… ImageCodecQueueStopping 
// ä÷êîÇåƒÇ—èoÇ∑DZÇΔÇÕǻǢÅB
pascal ComponentResult EI_ImageCodecQueueStopping(EI_Globals glob)
{
 #pragma unused(glob)

    return noErr;
}
 ...

ÉäÉXÉg 1 QueueStarting ÇΔ QueueStopping ÇÃé¿ëï


// ÉRÅ[ÉfÉbÉNÇ™ÅAQueueStarting ÇΔ QueueStopping Ç≈çÏãΔÇçsǧïKóvǙǻǢèÍçáÇÕÅA
// ÉfÉBÉXÉpÉbÉ`ÉÉÇ≈ ComponentNoError ÇégÇ¢ÅAComponentDispatchHelper 
// Ç…çÏãΔÇé¿çsÇ≥ÇπÇÈDZÇΔÇ™Ç≈Ç´ÇÈÅBǪǧÇ∑ÇÍÇŒ ComponentDispatchHelper ÇÕÅA 
// DZÇà 2 ǬÇÃÉZÉåÉNÉ^DžǬǢǃÇÕÅAbadComponentSelector Ç≈ÇÕÇ»Ç≠
// noErr ÇñflÇ∑ÅB

// MySubCodecDispatch.h
 ...
    ComponentRangeBegin (3)
        ComponentCall     (Preflight)
        ComponentCall     (Initialize)
        ComponentCall     (BeginBand)
        ComponentCall     (DrawBand)
        ComponentCall     (EndBand)
        ComponentNoError  (QueueStarting)
        ComponentNoError  (QueueStopping)
        ComponentDelegate (DroppingFrame)
        ComponentDelegate (ScheduleFrame)
        ComponentDelegate (CancelTrigger)
    ComponentRangeEnd (3)
 ...

ÉäÉXÉg 2 ComponentNoError ÇégÇ¡ÇΩ QueueStarting ÇΔ QueueStopping ÇÃé¿ëï


éQçlï∂å£

QuickTime Codec Components

Base Image Decompressor Functions


[2002 îN 7 åé 9 ì˙]